// let a: object // a能存储非原始类型
// let b: Object // b能存储的类型是可以调用到Object方法的类型，就是除了null和undefined之外都能存

// a = {}
// a = [1, 2, 3]
// a = function () { }
// a = new String('fwa')
// class C { }
// a = new C()

// b = {}
// b = [1, 2, 3]
// b = function () { }
// b = new String('fwa')
// class C { }
// b = new C()
// // 下面三个的包装对象可以访问Object方法
// b = 1
// b = true
// b = 'Niha'

// b = null // 不能存null调用不到Object方法
// b = undefined // 不能存undefined调用不到Object方法



// 声明对象类型
// let person1: { name: string, age?: number } // ?代表可选属性，可有可无

// let person2: { name: string; age?: number }
// let person3: { 
//   name: string 
//   age?: number 
// }

// // 中间分隔符可以是; , 或者换行，新赋值的对象分隔符必须相同
// person1 = { name: 'tom', age: 18 }

// let person: {
//   name: string
//   age?: number
//   [key:string]:any // 表示接下来可以接收很多属性，key（可以是任意名称，key只是符合规范）为string，值为any
// }

// person = { name: 'tom', age: 18, sex: 'male' }



// 声明函数类型
let count: (a: number, b: number) => number // => 左边是参数，右边是返回值
count = function (a, b) { 
  // return a + b + 'asdf'
  return a + b
}

// 声明数组类型
let arr1: string[] // 其中每一项都是字符串
let arr2: Array<number> //其中每一项都是数字

arr1 = ['a', 'f']
arr2 = [1, 2, 3]

export {}